package com.t.bricks.bussiness.controller.tidings;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.t.bricks.bussiness.db.entity.tidings.Tidings;
import com.t.bricks.bussiness.service.tidings.TidingsService;
import com.t.bricks.model.MsgEmity;

@RestController
@Api(value="消息管理", tags={"基本业务-消息管理操作接口"})
@RequestMapping("/tidings/")
public class TidingsController {
	
	@Autowired
	private TidingsService tidingsService;

	/**
	 * 删除数据
	 * @param iVersion
	 * @param iId 记录编号
	 * @return MsgEmity
	 */
	@ApiOperation(value="删除数据", notes="只有双方都删除才会真正删除记录")
	@ApiImplicitParams({
		@ApiImplicitParam(name="iId", value="记录编号", dataType="Long", paramType="query", required=true),
		@ApiImplicitParam(name="isSsendee", value="是否接收者(不是接收者就是发送者)", dataType="Integer", paramType="query", required=false)
	})
	@RequestMapping(method={RequestMethod.POST}, value="/del")
	public MsgEmity delSign(Long iId, Integer isSsendee) {
		return tidingsService.delSign(iId, isSsendee);
	}

	/**
	 * 新增数据
	 * @param tidings 消息管理实体对象
	 * @return MsgEmity
	 */
	//[start]
	@ApiOperation(value="新增数据", response=Tidings.class)
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值|Json数据对象}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8000, message="请求操作的参数为空"),
		@ApiResponse(code=8001, message="内部待转换的类型为空"),
		@ApiResponse(code=8002, message="服务端缺少json转换包的引用"),
		@ApiResponse(code=8003, message="服务端缺少json转换包的引用"),
		@ApiResponse(code=8004, message="待操作的数据不符合格式要求"),
		@ApiResponse(code=8011, message="检查数据时:待存储的数据实体不能为null"),
		@ApiResponse(code=8101, message="检查数据时:数据为null"),
		@ApiResponse(code=8102, message="检查数据时:数据某个值超出最大长度限制"),
		@ApiResponse(code=8103, message="检查数据时:数据某个值为空"),
		@ApiResponse(code=8021, message="验证数据是否重复时:待存储的数据实体不能为null"),
		@ApiResponse(code=8022, message="验证数据是否重复时:没有找到对应的dao实例,请检查代码规范"),
		@ApiResponse(code=8023, message="验证数据是否重复时:无法调用checkRepeatByAdd且发生了异常"),
		@ApiResponse(code=8024, message="验证数据是否重复时:检查数据是否重复失败"),
		@ApiResponse(code=8025, message="验证数据是否重复时:代码错误,checkRepeatByAdd方法返回的结构不是MsgEmity"),
		@ApiResponse(code=8026, message="验证数据是否重复时:数据重复"),
		@ApiResponse(code=8028, message="验证数据是否重复时:检查数据是否重复失败"),
		@ApiResponse(code=8311, message="补充数据时:待存储的数据实体不能为null"),
		@ApiResponse(code=8312, message="补充数据时:设置默认值失败"),
		@ApiResponse(code=7001, message="新增数据失败"),
		@ApiResponse(code=7002, message="新增时发生异常"),
		@ApiResponse(code=7003, message="7003~8998为新增时发生的其它错误")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/add")
	public MsgEmity add(@RequestBody Tidings tidings) {
		return tidingsService.add(tidings);
	}
	
	/**
	 * 搜索关键字对应的记录
	 * @param likeStr
	 * @return
	 */
	@ApiOperation(value="搜索关键字对应的记录", response=Tidings.class)
	@ApiImplicitParams({
		@ApiImplicitParam(name="likeStr", value="关键字", dataType="String", paramType="query", required=true)
	})
	@RequestMapping(method={RequestMethod.POST}, value="/search")
	public MsgEmity search(String likeStr) {
		return tidingsService.search(likeStr);
	}
	
	/**
	 * 查询指定时间的对话信息
	 * @param dateSt 开始时间
	 * @param dateEd 结束时间
	 * @return List<Tidings>
	 */
	@ApiOperation(value="查询指定时间的对话信息", response=Tidings.class)
	@ApiImplicitParams({
		@ApiImplicitParam(name="stDate", value="开始时间(格式:yyyy-MM-dd HH:mm:ss.SS)", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="dateEd", value="结束时间(格式:yyyy-MM-dd HH:mm:ss.SS)", dataType="String", paramType="query", required=true)
	})
	@RequestMapping(method={RequestMethod.POST}, value="/find/date")
	public MsgEmity findByDate(String stDate, String edDate) {
		return tidingsService.findByDate(stDate, edDate);
	}

}
